home *** CD-ROM | disk | FTP | other *** search
/ Programmer Power Tools / Programmer Power Tools.iso / clipper / nannws12.arc / WHATKEY.PRG < prev    next >
Text File  |  1986-10-01  |  4KB  |  118 lines

  1. * Program  WHATKEY.PRG
  2. * Author   D. Morgan
  3. * Date     September 1986
  4. * Notes    Displays keystroke output two ways. First, output of
  5. *          Clipper INKEY() function; second, output of PC
  6. *          keyboard, obtained from PC ROM call INT 16 via
  7. *          accompanying assembly function PCKEY().  Use <Alt-T>
  8. *          to toggle between them with glimpse of <Alt-T> output
  9. *          first; <Alt-T> twice in quick succession for
  10. *          immediate toggle.
  11.  
  12. CLEAR
  13. SET ESCAPE OFF
  14. toggle = 1             && 1=Clipper INKEY()  0=PC keyboard
  15.  
  16. text
  17.        ██      ██  ██  ██   ████   ████████    ██   ██  ████   ██    ██
  18.        ██  ██  ██  ██  ██  ██  ██     ██       ██ ██    ██     ██    ██  
  19.        ██  ██  ██  ██████  ██  ██     ██       ███      ████   ████████
  20.        ██  ██  ██  ██  ██  ██████     ██       ██ ██    ██        ██
  21.        ██████████  ██  ██  ██  ██     ██       ██   ██  █████     ██ 
  22. endtext
  23.  
  24. empty_frame = "┌─┐│┘─└│ "                      && Draw two boxes
  25. @ 8,2 SAY 'IBM PC Keyboard Output'
  26. @ 9,2,21,35 BOX empty_frame
  27. @ 8,42 SAY 'Clipper INKEY() Function Output'
  28. @ 9,42,21,75 BOX empty_frame
  29.  
  30. @ 11,65 SAY 'Dec   Hex'        && Fill Clipper box with prompts
  31. @ 13,45 SAY 'Clipper INKEY(): '
  32. @ 15,45 SAY 'Printed character: '
  33. @ 22,42 SAY '<Alt-T> to Toggle to IBM output'
  34. @ 23,42 SAY '<Alt-Q> to Quit'
  35. @ 15,65 SAY ''
  36.  
  37. key = 0
  38. DO WHILE .NOT.((toggle=1.AND.key=272);
  39.  .OR. (toggle=0.AND.key=4096))                && <Alt-Q> to quit 
  40.  key = 0
  41.  
  42.  IF toggle = 1                 && Get/display Clipper key output
  43.   trash = INKEY(0)
  44.   key = LASTKEY()
  45.   IF  key>=0
  46.    hex_str = DECTOHEX(key)
  47.   ELSE
  48.    hex_str='    '
  49.   ENDIF
  50.   hex_str = SUBSTR('0000'+hex_str,LEN(hex_str)+1,4)
  51.   @ 13,62 SAY STR(key,6)+'  '+hex_str
  52.   @ 15,65 SAY CHR(key)
  53.  ELSE                               && Get/display PC key output
  54.   key = PCKEY()
  55.   hex_str = DECTOHEX(key)
  56.   hex_str = SUBSTR('0000'+hex_str,LEN(hex_str)+1,4)
  57.   @ 13,21 SAY STR(INT(key/256),6)+'    '+SUBSTR(hex_str,1,2)
  58.   @ 16,21 SAY STR(key%256,6)+'    '+SUBSTR(hex_str,3,2)
  59.   @ 19,25 SAY CHR(key%256)
  60.  ENDIF :toggle=1
  61.  
  62.  IF (toggle=1.AND.key=276);
  63.   .OR. (toggle=0.AND.key = 5120)            && <Alt-T> to toggle
  64.   trash = INKEY(1)  && Let user glimpse Alt-T toggle char output
  65.   toggle = 1 - toggle && Toggle to other state, 1-to-0 or 0-to-1
  66.   IF toggle = 1
  67.    @ 9,2,21,35 BOX empty_frame   && Blank PC box to show INKEY()
  68.    @ 11,65 SAY 'Dec   Hex'        && and paint prompts in PC box
  69.    @ 13,45 SAY 'Clipper INKEY(): '
  70.    @ 15,45 SAY 'Printed character:  '
  71.    @ 22,0
  72.    @ 23,0
  73.    @ 22,42 SAY '<Alt-T> to Toggle to IBM output'
  74.    @ 23,42 SAY '<Alt-Q> to Quit'
  75.    @ 15,65 SAY ''
  76.   ELSE
  77.    @ 9,42,21,75 BOX empty_frame     && Blank INKEY() box to show PC
  78.    @ 11,24 SAY 'Dec   Hex'   && and paint prompts in INKEY() box
  79.    @ 13,5 SAY 'Auxiliary byte: '
  80.    @ 14,6 SAY '(scan code)'
  81.    @ 16,5 SAY 'Main byte:      '
  82.    @ 17,6 SAY '(ASCII value)'
  83.    @ 19,5 SAY 'Printed character:  '
  84.    @ 22,0
  85.    @ 23,0
  86.    @ 22,2 SAY '<Alt-T> to Toggle to Clipper output'
  87.    @ 23,2 SAY '<Alt-Q> to Quit'
  88.    @ 19,25 SAY ''
  89.   ENDIF :toggle = 1
  90.  ENDIF :toggle.AND.key .OR. toggle.AND.key
  91. ENDDO :toggle.AND.key .OR. toggle.AND.key
  92. @ 22,0 CLEAR
  93. RETURN
  94.  
  95.  
  96. FUNCTION DECTOHEX
  97. *
  98. * Syntax: DECTOHEX(<expN>)
  99. * Return: <expC>, a string consisting of as many hexadecimal
  100. *         digits as required to represent in hex the value of
  101. *         the input
  102.  
  103. PRIVATE dec,hex_str,power,no_times
  104. PARAMETERS dec
  105. hex_str = ''
  106. power = 0
  107. DO WHILE INT( dec/(16^(power+1)) ) > 0 && find highest dividable
  108.   power = power + 1                               && power of 16
  109. ENDDO
  110. DO WHILE power >= 0                     && find how many of each
  111.  no_times = INT(dec/(16^power))
  112.  hex_str = hex_str +;
  113.   IF(no_times<10,CHR(48+no_times),CHR(55+no_times))
  114.  dec = dec - no_times * (16^power)
  115.  power = power - 1
  116. ENDDO
  117. RETURN(hex_str)
  118.